home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Src / LINEconsole / drive.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  8.7 KB  |  479 lines

  1. /* drive.c: main routine for line based console */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Src/LINEconsole/RCS/drive.c,v 6.0 1991/12/18 20:26:30 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Src/LINEconsole/RCS/drive.c,v 6.0 1991/12/18 20:26:30 jpo Rel $
  9.  *
  10.  * $Log: drive.c,v $
  11.  * Revision 6.0  1991/12/18  20:26:30  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15. #include    "console.h"
  16.  
  17. extern Command get_command();
  18. extern int    connected, info_shown;
  19. extern char    *host;
  20.  
  21. int    total_volume, total_number_messages, total_number_reports;
  22. int    assocD = -1;
  23. time_t    currentTime;
  24. Command    comm = Unknown;
  25.  
  26. main(argc, argv)
  27. int    argc;
  28. char    **argv;
  29. {
  30.     init(argc, argv);
  31.     top_level_menu();
  32.     QuitProc();
  33. }
  34.  
  35. #define ARG_QUEUE    1
  36. #define    ARG_USER    2
  37. #define ARG_AUTHORISED    3
  38.  
  39. int bypassHostQuestions = FALSE;
  40. extern char    *username;
  41. extern int    authorised;
  42.  
  43. static CMD_TABLE    tb_args [] = { /* all possible cmdline args */
  44.     "-queue",    ARG_QUEUE,
  45.     "-queu",    ARG_QUEUE,
  46.     "-que",        ARG_QUEUE,
  47.     "-qu",        ARG_QUEUE,
  48.     "-q",        ARG_QUEUE,
  49.     
  50.     "-user",    ARG_USER,
  51.     "-use",        ARG_USER,
  52.     "-us",        ARG_USER,
  53.     "-u",        ARG_USER,
  54.  
  55.     "-authorised",    ARG_AUTHORISED,
  56.     "-authorise",    ARG_AUTHORISED,
  57.     "-authoris",    ARG_AUTHORISED,
  58.     "-authori",    ARG_AUTHORISED,
  59.     "-author",    ARG_AUTHORISED,
  60.     "-autho",    ARG_AUTHORISED,
  61.     "-auth",    ARG_AUTHORISED,
  62.     "-aut",        ARG_AUTHORISED,
  63.     "-au",        ARG_AUTHORISED,
  64.     "-a",        ARG_AUTHORISED,
  65.  
  66.     0,    -1
  67.     };
  68.  
  69. init(argc, argv)
  70. int    argc;
  71. char    **argv;
  72. {
  73.     int    i;
  74.     isodetailor(argv[0], 1);
  75.     init_host();
  76.     init_pager();
  77.     for (i = 1; i < argc; i++) {
  78.         switch(cmd_srch(argv[i], tb_args)) {
  79.             case ARG_QUEUE:
  80.             if (++i >= argc)
  81.                 fprintf(stderr, 
  82.                     "No hostname given with flag '%s'\n",
  83.                     argv[i-1]);
  84.             else {
  85.                 if (host) free(host);
  86.                 host = strdup(argv[i]);
  87.                 comm = Connect;
  88.                 bypassHostQuestions = TRUE;
  89.             }
  90.             break;
  91.             case ARG_USER:
  92.             if (++i >= argc)
  93.                 fprintf(stderr, 
  94.                     "No username given with flag '%s'\n",
  95.                     argv[i-1]);
  96.             else {
  97.                 if (username) free(username);
  98.                 username = strdup(argv[i]);
  99.             }
  100.             break;
  101.             
  102.             case ARG_AUTHORISED:
  103.             authorised = TRUE;
  104.             break;
  105.  
  106.             default:
  107.             fprintf(stderr,
  108.                 "Unknown flag '%s'\n",
  109.                 argv[i]);
  110.         }
  111.     }
  112.     init_assoc();
  113. }
  114.  
  115. extern char    prompt[], *level2str();
  116. extern int    compat;
  117. Level    lev = top;
  118.  
  119. top_level_menu()
  120. {
  121.     reset_prompt_regex();
  122.     if (comm == Unknown)
  123.         comm = get_command(top);
  124.     while (comm != Quit) {
  125.         switch (comm) {
  126.             case Connect:
  127.             set_host();
  128.             ConnectProc();
  129.             if (connected == TRUE) {
  130.                 if (!compat)
  131.                     my_invoke(qmgrStatus, (char **) NULL);
  132.                 channel_level_menu();
  133.                 lev = top;
  134.                 reset_prompt_regex();
  135.             }
  136.             break;
  137.             case Disconnect:
  138.             DisconnectProc();
  139.             comm = Unknown;
  140.             break;
  141.             case Heuristics:
  142.             heuristics_menu();
  143.             break;
  144.             case Status:
  145.             print_status();
  146.             break;
  147.             case Set:
  148.             variables();
  149.             break;
  150.             default:
  151.             fprintf(stderr,
  152.                 "Unknown command '%s' in top level menu\n",
  153.                 command2str(comm));
  154.             break;
  155.         }
  156.         if (comm != Quit
  157.             && comm != Disconnect)
  158.             comm = get_command(top);
  159.         
  160.     }
  161. }
  162.  
  163. channel_level_menu()
  164. {
  165.     
  166.     int    cont = TRUE;
  167.     lev = channel;
  168.     reset_prompt_regex();
  169.     comm = List; /* get_command(channel);*/
  170.     info_shown = FALSE;
  171.  
  172.     while (cont == TRUE) {
  173.         switch (comm) {
  174.             case Disconnect:
  175.             case Quit:
  176.             cont = FALSE;
  177.             break;
  178.             case Heuristics:
  179.             heuristics_menu();
  180.             break;
  181.             case Status:
  182.             print_status();
  183.             break;
  184.             case Set:
  185.             variables();
  186.             break;
  187.             case Refresh:
  188.             channel_do_refresh();
  189.             break;
  190.             case Quecontrol:
  191.             Qcontrol();
  192.             break;
  193.             case Current:
  194.             if (channel_set_current() == OK)
  195.                 reset_prompt_regex();
  196.             break;
  197.             case Down:
  198.             if (channel_set_current() == OK) {
  199.                 mta_level_menu();
  200.                 lev = channel;
  201.                 reset_prompt_regex();
  202.             }
  203.             break;
  204.             case Next:
  205.             channel_next();
  206.             reset_prompt_regex();
  207.             channel_info_regex();
  208.             break;
  209.             case Previous:
  210.             channel_previous();
  211.             reset_prompt_regex();
  212.             channel_info_regex();
  213.             break;
  214.             case Info:
  215.             if (channel_set_current_regex() == OK) {
  216.                 reset_prompt_regex();
  217.                 channel_info_regex();
  218.             }
  219.             break;
  220.             case List:
  221.             channel_list();
  222.             break;
  223.             case Enable:
  224.             if (channel_set_current_regex() == OK) {
  225.                 reset_prompt_regex();
  226.                 channel_enable_regex();
  227.             }
  228.             break;
  229.             case Disable:
  230.             if (channel_set_current_regex() == OK) {
  231.                 reset_prompt_regex();
  232.                 channel_disable_regex();
  233.             }
  234.             break;
  235.             case Delay:
  236.             if (channel_set_current_regex() == OK) {
  237.                 reset_prompt_regex();
  238.                 channel_delay_regex();
  239.             }
  240.             break;
  241.             case Clear:
  242.             if (channel_set_current_regex() == OK) {
  243.                 reset_prompt_regex();
  244.                 channel_clear_regex();
  245.             }
  246.             break;
  247.             case BelowClear:
  248.             if (channel_set_current_regex() == OK) {
  249.                 reset_prompt_regex();
  250.                 channel_below_clear_regex();
  251.             }
  252.             break;
  253.             default:
  254.             fprintf(stderr,
  255.                 "Unknown command '%s'  in channel level menu\n",
  256.                 command2str(comm));
  257.             break;
  258.         }
  259.         if (cont == TRUE) {
  260.             if (comm != Quit
  261.                 && comm != Disconnect)
  262.                 comm = get_command(channel);
  263.             else
  264.                 cont = FALSE;
  265.         }
  266.     }
  267.     clear_channel_level();
  268. }
  269.  
  270. mta_level_menu()
  271. {
  272.     
  273.     int    cont = TRUE;
  274.     lev = mta;
  275.     reset_prompt_regex();
  276.     comm = List; /* get_command(mta);*/
  277.     info_shown = FALSE;
  278.  
  279.     while (cont == TRUE) {
  280.         switch (comm) {
  281.             case Disconnect:
  282.             case Quit:
  283.             case Up:
  284.             cont = FALSE;
  285.             break;
  286.             case Heuristics:
  287.             heuristics_menu();
  288.             break;
  289.             case Status:
  290.             print_status();
  291.             break;
  292.             case Set:
  293.             variables();
  294.             break;
  295.             case Current:
  296.             if (mta_set_current() == OK)
  297.                 reset_prompt_regex();
  298.             break;
  299.             case Refresh:
  300.             mta_do_refresh();
  301.             break;
  302.             case Down:
  303.             if (mta_set_current() == OK) {
  304.                 msg_level_menu();
  305.                 lev = mta;
  306.                 reset_prompt_regex();
  307.             }
  308.             break;
  309.             case Next:
  310.             mta_next();
  311.             reset_prompt_regex();
  312.             mta_info_regex();
  313.             break;
  314.             case Previous:
  315.             mta_previous();
  316.             reset_prompt_regex();
  317.             mta_info_regex();
  318.             break;
  319.             case Info:
  320.             if (mta_set_current_regex() == OK) {
  321.                 reset_prompt_regex();
  322.                 mta_info_regex();
  323.             }
  324.             break;
  325.             case List:
  326.             mta_list();
  327.             break;
  328.             case Enable:
  329.             if (mta_set_current_regex() == OK) {
  330.                 reset_prompt_regex();
  331.                 mta_enable_regex();
  332.             }
  333.             break;
  334.             case Disable:
  335.             if (mta_set_current_regex() == OK) {
  336.                 reset_prompt_regex();
  337.                 mta_disable_regex();
  338.             }
  339.             break;
  340.             case Delay:
  341.             if (mta_set_current_regex() == OK) {
  342.                 reset_prompt_regex();
  343.                 mta_delay_regex();
  344.             }
  345.             break;
  346.             case Clear:
  347.             if (mta_set_current_regex() == OK) {
  348.                 reset_prompt_regex();
  349.                 mta_clear_regex();
  350.             }
  351.             break;
  352.             case BelowClear:
  353.             if (mta_set_current_regex() == OK) {
  354.                 reset_prompt_regex();
  355.                 mta_clear_below_regex();
  356.             }
  357.             break;
  358.             case AboveClear:
  359.             if (mta_set_current_regex() == OK) {
  360.                 reset_prompt_regex();
  361.                 mta_clear_above_regex();
  362.             }
  363.             break;
  364.             default:
  365.             fprintf(stderr,
  366.                 "Unknown command '%s'  in mta level menu\n",
  367.                 command2str(comm));
  368.             break;
  369.         }
  370.         if (cont == TRUE) {
  371.             if (comm != Quit
  372.                 && comm != Disconnect)
  373.                 comm = get_command(mta);
  374.             else
  375.                 cont = FALSE;
  376.         }
  377.     }
  378.     clear_mta_level();
  379. }
  380.  
  381. msg_level_menu()
  382. {
  383.     
  384.     int    cont = TRUE;
  385.     lev = msg;
  386.     reset_prompt_regex();
  387.     comm = List; /* get_command(msg); */
  388.     info_shown = FALSE;
  389.  
  390.     while (cont == TRUE) {
  391.         switch (comm) {
  392.             case Disconnect:
  393.             case Quit:
  394.             case Up:
  395.             cont = FALSE;
  396.             break;
  397.             case Next:
  398.             msg_next();
  399.             reset_prompt_regex();
  400.             msg_info_regex();
  401.             break;
  402.             case Previous:
  403.             msg_previous();
  404.             reset_prompt_regex();
  405.             msg_info_regex();
  406.             break;
  407.             case Heuristics:
  408.             heuristics_menu();
  409.             break;
  410.             case Status:
  411.             print_status();
  412.             break;
  413.             case Set:
  414.             variables();
  415.             break;
  416.             case Refresh:
  417.             msg_do_refresh();
  418.             break;
  419.             case Current:
  420.             if (msg_set_current() == OK)
  421.                 reset_prompt_regex();
  422.             break;
  423.             case Info:
  424.             if (msg_set_current_regex() == OK) {
  425.                 reset_prompt_regex();
  426.                 msg_info_regex();
  427.             }
  428.             break;
  429.             case List:
  430.             msg_list();
  431.             break;
  432.             case Enable:
  433.             if (msg_set_current_regex() == OK) {
  434.                 reset_prompt_regex();
  435.                 msg_enable_regex();
  436.             }
  437.             break;
  438.             case Disable:
  439.             if (msg_set_current_regex() == OK) {
  440.                 reset_prompt_regex();
  441.                 msg_disable_regex();
  442.             }
  443.             break;
  444.             case Delay:
  445.             if (msg_set_current_regex() == OK) {
  446.                 reset_prompt_regex();
  447.                 msg_delay_regex();
  448.             }
  449.             break;
  450.             case Clear:
  451.             if (msg_set_current_regex() == OK) {
  452.                 reset_prompt_regex();
  453.                 msg_clear_regex();
  454.             }
  455.             break;
  456.             case AboveClear:
  457.             if (msg_set_current_regex() == OK) {
  458.                 reset_prompt_regex();
  459.                 msg_clear_above_regex();
  460.             }
  461.             break;
  462.             default:
  463.             fprintf(stderr,
  464.                 "Unknown command '%s'  in msg level menu\n",
  465.                 command2str(comm));
  466.             break;
  467.         }
  468.         if (cont == TRUE) {
  469.             if (comm != Quit
  470.                 && comm != Disconnect)
  471.                 comm = get_command(msg);
  472.             else
  473.                 cont = FALSE;
  474.         }
  475.     }
  476.     clear_msg_level();
  477. }
  478.  
  479.